' ****** START INCLUDE Rgba Core ******
DIM r0%, g0%, b0%, a0%, r1%, g1%, b1%, a1%
DIM RbgaAreaBorder# = &h0000FF
SUB SetRgb0(x%,y%)
DIM c$
c$ = RIGHT$("000000" + HEX$(POINT(x%,y%)), 6)
r0% = VAL("0x" + LEFT$(c$,2))
g0% = VAL("0x" + MID$(c$,3,2))
b0% = VAL("0x" + RIGHT$(c$,2))
END SUB
SUB SetRgb1(c&,a%b)
DIM c$
c$ = RIGHT$("000000" + HEX$(c&), 6)
r1% = VAL("0x" + LEFT$(c$,2))
g1% = VAL("0x" + MID$(c$,3,2))
b1% = VAL("0x" + RIGHT$(c$,2))
a0% = 255 - a%b
a1% = a%b
END SUB
SUB RgbaCorePset(x%,y%)
PSET(x%,y%), _RGB( [{ (r0%*a0%)+(r1%*a1%) }/255], [{ (g0%*a0%)+(g1%*a1%) }/255], [{ (b0%*a0%)+(b1%*a1%) }/255] )
END SUB
' ****** END INCLUDE Rgba Core ******
Sub RgbaCircle (xc#, yc#, r#, c&, a%b)
PCOPY 0,-1
CIRCLE (xc#, yc#), r#, RbgaAreaBorder#
DIM xc%, yc%, r%, x%, y%, x1%, x2%
xc% = fix(xc#) : yc% = fix(yc#) : r% = fix(r#)
SetRgb1(c&, a%b)
for y% = MAX(0,(yc% - r%)) TO MIN(_HEIGHT-1,(yc% + r%))
x1% = MAX(xc% - r%, 0)
WHILE POINT(x1%, y%) <> RbgaAreaBorder# and x1% < MIN(_WIDTH - 1, xc%+r%) : x1% = x1% + 1 : WEND
x2% = MIN(xc% + r%, _WIDTH - 1)
WHILE POINT(x2%, y%) <> RbgaAreaBorder# and x2% > MAX(0, xc%-r%) : x2% = x2% - 1 : WEND
IF x1% > xc% THEN x1% = 0
IF x2% < xc% THEN x2% = _WIDTH - 1
IF POINT(x1%,y%) = RbgaAreaBorder# OR POINT(x2%,y%) = RbgaAreaBorder# THEN
FOR x% = x1% TO x2%
IF POINT(x%,y%) = RbgaAreaBorder# THEN PCOPY(x%, y%) - (x%, y%), -1, 0
SetRgb0(x%,y%) : RgbaCorePset(x%,y%)
NEXT x%
END IF
next y%
END SUB
SCREEN _NEWIMAGE(400,400, 27)
â–¶StartIteration:
x% = INT(RND*180) + 20
y% = INT(RND*180) + 20
r% = INT(RND*17) + 4
colour& = INT(RND * &hFFFFFE) + 2
alpha% = INT( RND * 125 )
RgbaCircle(x%,y%,r%,colour&,alpha%)
RgbaCircle(400 - x%,y%,r%,colour&,alpha%)
RgbaCircle(x%,400-y%,r%,colour&,alpha%)
RgbaCircle(400-x%,400-y%,r%,colour&,alpha%)
_DELAY 0.01
GOTO â–¶StartIteration